package com.zyj.java;

/**
 * @program: JVMDemo
 * @ClassName HeapSpaceInitial
 * @author: YaJun
 * @Date: 2021 - 12 - 13 - 10:44
 * @Package: com.zyj.java
 * @Description:
 * -Xms 用来设置堆空间（年轻代 + 老年代）的初始内存大小
 *      -X 是jvm的运行参数
 *      ms 是 memory start
 * -Xmx 用来设置堆空间（年轻代 + 老年代）的最大内存大小
 *
 * 默认情况下：
 *  初始内存大小：物理电脑内存大小 / 64
 *  最大内存大小：物理电脑内存大小 / 4
 *  开发时推荐将最大内存和初始内存设置为一样，因为动态扩容和GC可能会有冲突，增加系统的压力
 * 手动设置内存：-Xms600m -Xmx600m
 *  查看方式一：查看进程 jps; jstat -gc + 进程id 查看堆内存和GC状态
 *  查看方式二：-XX:+PrintGCDetails
 *
 * 注意：幸存者区中的两个区，只有一个区存数据，所以计算的时候显示的堆内存会减一部分
 */
public class HeapSpaceInitial {

    public static void main(String[] args) {

        // 返回Java虚拟机中的堆内存总量
        long initialMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024;
        // 返回Java虚拟机试图使用的最大堆内存量
        long maxMemory = Runtime.getRuntime().maxMemory() / 1024 / 1024;

        System.out.println("-Xms :" + initialMemory + "M");
        System.out.println("-Xmx :" + maxMemory + "M");

//        System.out.println("系统内存大小为：" + initialMemory * 64.0 / 1024 + "G");
//        System.out.println("系统内存大小为：" + maxMemory * 4.0 / 1024 + "G");

//        try {
//            Thread.sleep(10000000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }

    }

}
